macos: No need to drag handle events
authorArjan Molenaar <gaphor@gmail.com>
Wed, 11 Jan 2023 18:01:05 +0000 (19:01 +0100)
committerArjan Molenaar <gaphor@gmail.com>
Sun, 15 Jan 2023 09:03:47 +0000 (10:03 +0100)
This is handled by the DraggingSource object.

gdk/macos/gdkmacosdrag.c

index 5c11da851bb6c03f4f9a9355df876189b9457884..b7549e5b9e696252c3048d57b4f3a13d290b532a 100644 (file)
@@ -274,225 +274,6 @@ gdk_drag_get_current_actions (GdkModifierType  state,
     }
 }
 
-static void
-gdk_drag_update (GdkDrag         *drag,
-                 double           x_root,
-                 double           y_root,
-                 GdkModifierType  mods,
-                 guint32          evtime)
-{
-  GdkMacosDrag *self = (GdkMacosDrag *)drag;
-  GdkDragAction suggested_action;
-  GdkDragAction possible_actions;
-
-  g_assert (GDK_IS_MACOS_DRAG (self));
-
-  self->last_x = x_root;
-  self->last_y = y_root;
-
-  gdk_drag_get_current_actions (mods,
-                                GDK_BUTTON_PRIMARY,
-                                gdk_drag_get_actions (drag),
-                                &suggested_action,
-                                &possible_actions);
-
-  if (GDK_IS_MACOS_SURFACE (self->drag_surface))
-    _gdk_macos_surface_move (GDK_MACOS_SURFACE (self->drag_surface),
-                             x_root - self->hot_x,
-                             y_root - self->hot_y);
-
-  if (!self->did_update)
-    {
-      self->start_x = self->last_x;
-      self->start_y = self->last_y;
-      self->did_update = TRUE;
-    }
-
-  gdk_drag_set_actions (drag, possible_actions);
-}
-
-static gboolean
-gdk_dnd_handle_motion_event (GdkDrag  *drag,
-                             GdkEvent *event)
-{
-  double x, y;
-  int x_root, y_root;
-
-  g_assert (GDK_IS_MACOS_DRAG (drag));
-  g_assert (event != NULL);
-
-  /* Ignore motion while doing zoomback */
-  if (GDK_MACOS_DRAG (drag)->cancelled)
-    return FALSE;
-
-  gdk_event_get_position (event, &x, &y);
-  x_root = event->surface->x + x;
-  y_root = event->surface->y + y;
-  gdk_drag_update (drag, x_root, y_root,
-                   gdk_event_get_modifier_state (event),
-                   gdk_event_get_time (event));
-
-  return TRUE;
-}
-
-static gboolean
-gdk_dnd_handle_grab_broken_event (GdkDrag  *drag,
-                                  GdkEvent *event)
-{
-  GdkMacosDrag *self = GDK_MACOS_DRAG (drag);
-  gboolean is_implicit = gdk_grab_broken_event_get_implicit (event);
-  GdkSurface *grab_surface = gdk_grab_broken_event_get_grab_surface (event);
-
-  /* Don't cancel if we break the implicit grab from the initial button_press. */
-  if (is_implicit || grab_surface == (GdkSurface *)self->drag_surface)
-    return FALSE;
-
-  if (gdk_event_get_device (event) != gdk_drag_get_device (drag))
-    return FALSE;
-
-  gdk_drag_cancel (drag, GDK_DRAG_CANCEL_ERROR);
-
-  return TRUE;
-}
-
-static gboolean
-gdk_dnd_handle_button_event (GdkDrag  *drag,
-                             GdkEvent *event)
-{
-  GdkMacosDrag *self = GDK_MACOS_DRAG (drag);
-
-  g_assert (GDK_IS_MACOS_DRAG (self));
-  g_assert (event != NULL);
-
-#if 0
-  /* FIXME: Check the button matches */
-  if (event->button != self->button)
-    return FALSE;
-#endif
-
-  if (gdk_drag_get_selected_action (drag) != 0)
-    g_signal_emit_by_name (drag, "drop-performed");
-  else
-    gdk_drag_cancel (drag, GDK_DRAG_CANCEL_NO_TARGET);
-
-  return TRUE;
-}
-
-static gboolean
-gdk_dnd_handle_key_event (GdkDrag  *drag,
-                          GdkEvent *event)
-{
-  GdkMacosDrag *self = GDK_MACOS_DRAG (drag);
-  GdkModifierType state;
-  GdkDevice *pointer;
-  GdkSeat *seat;
-  int dx, dy;
-
-  dx = dy = 0;
-  state = gdk_event_get_modifier_state (event);
-  seat = gdk_event_get_seat (event);
-  pointer = gdk_seat_get_pointer (seat);
-
-  if (event->event_type == GDK_KEY_PRESS)
-    {
-      guint keyval = gdk_key_event_get_keyval (event);
-
-      switch (keyval)
-        {
-        case GDK_KEY_Escape:
-          gdk_drag_cancel (drag, GDK_DRAG_CANCEL_USER_CANCELLED);
-          return TRUE;
-
-        case GDK_KEY_space:
-        case GDK_KEY_Return:
-        case GDK_KEY_ISO_Enter:
-        case GDK_KEY_KP_Enter:
-        case GDK_KEY_KP_Space:
-          if (gdk_drag_get_selected_action (drag) != 0)
-            g_signal_emit_by_name (drag, "drop-performed");
-          else
-            gdk_drag_cancel (drag, GDK_DRAG_CANCEL_NO_TARGET);
-
-          return TRUE;
-
-        case GDK_KEY_Up:
-        case GDK_KEY_KP_Up:
-          dy = (state & GDK_ALT_MASK) ? -BIG_STEP : -SMALL_STEP;
-          break;
-
-        case GDK_KEY_Down:
-        case GDK_KEY_KP_Down:
-          dy = (state & GDK_ALT_MASK) ? BIG_STEP : SMALL_STEP;
-          break;
-
-        case GDK_KEY_Left:
-        case GDK_KEY_KP_Left:
-          dx = (state & GDK_ALT_MASK) ? -BIG_STEP : -SMALL_STEP;
-          break;
-
-        case GDK_KEY_Right:
-        case GDK_KEY_KP_Right:
-          dx = (state & GDK_ALT_MASK) ? BIG_STEP : SMALL_STEP;
-          break;
-
-        default:
-          break;
-        }
-    }
-
-  /* The state is not yet updated in the event, so we need
-   * to query it here. We could use XGetModifierMapping, but
-   * that would be overkill.
-   */
-  gdk_macos_device_query_state (pointer, NULL, NULL, NULL, NULL, &state);
-
-  if (dx != 0 || dy != 0)
-    {
-      GdkDisplay *display = gdk_event_get_display ((GdkEvent *)event);
-
-      self->last_x += dx;
-      self->last_y += dy;
-
-      _gdk_macos_display_warp_pointer (GDK_MACOS_DISPLAY (display),
-                                       self->last_x,
-                                       self->last_y);
-    }
-
-  gdk_drag_update (drag,
-                   self->last_x, self->last_y,
-                   state,
-                   gdk_event_get_time (event));
-
-  return TRUE;
-}
-
-static gboolean
-gdk_macos_drag_handle_event (GdkDrag  *drag,
-                             GdkEvent *event)
-{
-  g_assert (GDK_IS_MACOS_DRAG (drag));
-  g_assert (event != NULL);
-
-  switch ((guint) event->event_type)
-    {
-    case GDK_MOTION_NOTIFY:
-      return gdk_dnd_handle_motion_event (drag, event);
-
-    case GDK_BUTTON_RELEASE:
-      return gdk_dnd_handle_button_event (drag, event);
-
-    case GDK_KEY_PRESS:
-    case GDK_KEY_RELEASE:
-      return gdk_dnd_handle_key_event (drag, event);
-
-    case GDK_GRAB_BROKEN:
-      return gdk_dnd_handle_grab_broken_event (drag, event);
-
-    default:
-      return FALSE;
-    }
-}
-
 static void
 gdk_macos_drag_finalize (GObject *object)
 {
@@ -561,7 +342,6 @@ gdk_macos_drag_class_init (GdkMacosDragClass *klass)
   drag_class->set_cursor = gdk_macos_drag_set_cursor;
   drag_class->cancel = gdk_macos_drag_cancel;
   drag_class->drop_performed = gdk_macos_drag_drop_performed;
-  drag_class->handle_event = gdk_macos_drag_handle_event;
 
   properties [PROP_DRAG_SURFACE] =
     g_param_spec_object ("drag-surface", NULL, NULL,